/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jpa.entities;

import java.io.Serializable;
import java.math.BigDecimal;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import javax.faces.context.FacesContext;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.PersistenceContext;
import javax.persistence.Table;

/**
 *
 * @author carlos
 */
@Entity
@Table(name = "Produto")
@NamedQueries({
    @NamedQuery(name = "Produto.findFilter", query = "SELECT p FROM Produto p WHERE p.colecao.idColecao = :IdColecao and p.modelo.idModelo = :IdModelo"),
    @NamedQuery(name = "Produto.findAll", query = "SELECT p FROM Produto p"),
    @NamedQuery(name = "Produto.findByIdProduto", query = "SELECT p FROM Produto p WHERE p.idProduto = :idProduto"),
    @NamedQuery(name = "Produto.findByValorUnitario", query = "SELECT p FROM Produto p WHERE p.valorUnitario = :valorUnitario"),
    @NamedQuery(name = "Produto.findByQuantidade", query = "SELECT p FROM Produto p WHERE p.quantidade = :quantidade"),
    @NamedQuery(name = "Produto.findByDescricao", query = "SELECT p FROM Produto p WHERE p.descricao = :descricao"),
    @NamedQuery(name = "Produto.findByMaisComprado", query = "SELECT p FROM Produto p WHERE p.maisComprado = :maisComprado"),
    @NamedQuery(name = "Produto.findByCaminhoImagem", query = "SELECT p FROM Produto p WHERE p.caminhoImagem = :caminhoImagem"),
    @NamedQuery(name = "Produto.findByDataRequisicao", query = "SELECT p FROM Produto p WHERE p.dataRequisicao = :dataRequisicao")})
public class Produto implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "IdProduto")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer idProduto;
    @Basic(optional = false)
    @Column(name = "ValorUnitario")
    private BigDecimal valorUnitario;
    @Basic(optional = false)
    @Column(name = "Quantidade")
    private int quantidade;
    @Column(name = "Descricao")
    private String descricao;
    @Basic(optional = false)
    @Column(name = "MaisComprado")
    private long maisComprado;
    @Basic(optional = false)
    @Column(name = "CaminhoImagem")
    private String caminhoImagem;
    @Basic(optional = false)
    @Column(name = "DataRequisicao")
    private String dataRequisicao;
    @JoinColumn(name = "Tamanho_idTamanho", referencedColumnName = "idTamanho")
    @ManyToOne(optional = false)
    private Tamanho tamanho;
    @JoinColumn(name = "Modelo_idModelo", referencedColumnName = "idModelo")
    @ManyToOne(optional = false)
    private Modelo modelo;
    @JoinColumn(name = "Cor_idCor", referencedColumnName = "idCor")
    @ManyToOne(optional = false)
    private Cor cor;
    @JoinColumn(name = "Colecao_idColecao", referencedColumnName = "IdColecao")
    @ManyToOne(optional = false)
    private Colecao colecao;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "produto")
    private Collection<ItemPedido> itemPedidoCollection;
    @Basic(optional = true)
    @Column(name = "InformacaoAdicional")
    private String informacaoAdicional;

    public Produto() {
    }

    public Produto(Integer idProduto) {
        this.idProduto = idProduto;
    }

    public String getInformacaoAdicional() {
        return informacaoAdicional;
    }

    public void setInformacaoAdicional(String informacaoAdicional) {
        this.informacaoAdicional = informacaoAdicional;
    }

    public Produto(Integer idProduto, BigDecimal valorUnitario, int quantidade, long maisComprado, String caminhoImagem, String dataRequisicao) {
        this.idProduto = idProduto;
        this.valorUnitario = valorUnitario;
        this.quantidade = quantidade;
        this.maisComprado = maisComprado;
        this.caminhoImagem = caminhoImagem;
        this.dataRequisicao = dataRequisicao;
    }

    public Integer getIdProduto() {
        return idProduto;
    }

    public void setIdProduto(Integer idProduto) {
        this.idProduto = idProduto;
    }

    public BigDecimal getValorUnitario() {
        return valorUnitario;
    }

    public void setValorUnitario(BigDecimal valorUnitario) {
        this.valorUnitario = valorUnitario;
    }

    public int getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public long getMaisComprado() {
        return maisComprado;
    }

    public void setMaisComprado(long maisComprado) {
        this.maisComprado = maisComprado;
    }

    public String getCaminhoImagem() {
        return caminhoImagem;
    }

    public void setCaminhoImagem(String caminhoImagem) {

        SimpleDateFormat simpleDateformat = new SimpleDateFormat("yyyy");
        if (!this.caminhoImagem.contains("/LaCruz_v2/faces/javax.faces.resource/")) {
            this.caminhoImagem = "/LaCruz_v2/faces/javax.faces.resource/fotos/" + getColecao().getDescricao() + '/'
                    + caminhoImagem.substring(caminhoImagem.lastIndexOf('\\') + 1, caminhoImagem.length());

        }
        else{
            this.caminhoImagem = caminhoImagem;

        }


    }

    public String getDataRequisicao() {
        return dataRequisicao;
    }

    public void setDataRequisicao(String dataRequisicao) {
        Date date = new Date();
        Format formater = new SimpleDateFormat("MM/dd/yyyy");
        String data = formater.format(date);
        this.dataRequisicao = data;
    }

    public Tamanho getTamanho() {
        return tamanho;
    }

    public void setTamanho(Tamanho tamanho) {
        this.tamanho = tamanho;
    }

    public Modelo getModelo() {
        return modelo;
    }

    public void setModelo(Modelo modelo) {
        this.modelo = modelo;
    }

    public Cor getCor() {
        return cor;
    }

    public void setCor(Cor cor) {
        this.cor = cor;
    }

    public Colecao getColecao() {
        return colecao;
    }

    public void setColecao(Colecao colecao) {
        this.colecao = colecao;
    }

    public Collection<ItemPedido> getItemPedidoCollection() {
        return itemPedidoCollection;
    }

    public void setItemPedidoCollection(Collection<ItemPedido> itemPedidoCollection) {
        this.itemPedidoCollection = itemPedidoCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idProduto != null ? idProduto.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Produto)) {
            return false;
        }
        Produto other = (Produto) object;
        if ((this.idProduto == null && other.idProduto != null) || (this.idProduto != null && !this.idProduto.equals(other.idProduto))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "jpa.entities.Produto[idProduto=" + idProduto + "]";
    }
}
